/*
导入自己的原型，让原型全局生效
 */
//import aopProtoType from './prototype';
import sugarCallBack from '@/libs/sugar/callback/index';

let {judgeCallBack} = sugarCallBack;

/*
在method上的的vm是当前的方法的实例
在生命周期上的的vm是当前的vue的实例
 */

export const before = function (...args) {
    const {callback} = args[0];
    return function (target, key, descriptor) {
        descriptor.value = descriptor.value.before((vm,...params) => {
            let beforeArguments = {vm,params};
            judgeCallBack(callback,beforeArguments);
        });
    };
};

export const after = function (...args) {
    const {callback} = args[0];
    return function (target, key, descriptor) {
        descriptor.value = descriptor.value.after((response,vm,...params) => {
            let afterArguments = {response,target,vm,params}
            judgeCallBack(callback,afterArguments);
        });
    };
};
export const around = function (...args) {
    const {beforeCallback,afterCallback} = args[0];
    return function (target, key, descriptor) {
        descriptor.value = descriptor.value.around(
            (vm,...params) => {
                console.log('params，',params);
                let beforeArguments = {vm,params};
                judgeCallBack(beforeCallback,beforeArguments);
             },
            (response,vm,...params) => {
                console.log('params，',params);
                console.log('response，',response);
                let afterArguments = {response,target,vm,params}
                judgeCallBack(afterCallback,afterArguments);
            }
            );
    };
};


/*
案例
 */
/**
 * 请求静态数据只是为了代码不那么乱
 * 分次请求未作整合
 *
 在method上的的vm是当前的方法的实例

 */
// @around(
//     {
//         beforeCallback:(vm,params)=>{
//             console.log('beforeCallback:');
//             console.log('vm',vm);
//             console.log('params',params);
//         },
//         afterCallback: async ({response,target,vm,params})=>{
//             console.log('afterCallback')
//             console.log('response:',response);
//             console.log('target',target);
//             console.log('vm',vm);
//             console.log('params',params);
//
//             /*
//             如果当前的函数是异步的，则需要
//             */
// //                        response.then(resp=>{
// //                            console.log('resp:',resp)
// //                        })
//             const resp = await response;
//             console.log('resp:',resp);
//
//         }
//     }
// )